<?php

/**
 * @author Paweł Napieracz
 * @version 1.0
 */
class Modul_Admin_Uzytkownik_Edycja extends Modul_Admin_Abstract {

    public function inicjalizuj() {
        $this->tytul = 'Edycja użytkownika';

        if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'edytuj') {
            $this->edytuj();
        } else if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'aktywuj') {
            $this->aktywuj();
        } else if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'dodaj') {
            $this->dodaj();
        } else if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'usun') {
            $this->usun();
        }
    }
    
    public function prawa() {
        if (isset($this->uzytkownik['uprawienia']) &&
                !in_array('cms_zarzadzanie_uzytkownicy', $this->uzytkownik['uprawienia'])) {
            $this->zakoncz('/cms/logowanie/akcja,blad,info,3.html');
        }
        parent::prawa();
    }

    private function edytuj() {
        $id = isset($this->param['id']) ? $this->param['id'] : $_POST['id'];
        if (!is_numeric($id)) {
            die();
        }

        $tab = new AutoDB('uzytkownik', 'id');
        $user = $tab->Get($id);

        /* Wyciąganie wszystkich dostępnych grup */
        $grupy = array();
        $tabGrupa = new AutoDB('cms_grupy');
        $grupySQL = $tabGrupa->Select('*')->Run();
        if ($grupySQL != false) {
            $grupySQL = $grupySQL->AsArray();
            foreach ($grupySQL as $v) {
                $grupy[$v['id']] = $v['nazwa'];
            }
        }

        $this->daneTPL['form'] =
                Form_Uzytkownik::generuj($user, '/cms/uzytkownicy/edycja/akcja,edytuj.html', $grupy);

        if (isset($_POST['login'])) {
            $bledy = $this->waliduj();
            if (Form_Valid::isValid($bledy)) {
                $znaki = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'q', 'w', 'e',
                    'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l',
                    'z', 'x', 'c', 'v', 'b', 'n', 'm');

                $pola = array(
                    'id_grupa' => $_POST['id_grupa'],
                    'mail' => $_POST['mail'],
                    'ostatnie_logowanie' => '2000-01-01',
                    'status' => $_POST['status']
                );

                /* Jeżeli zmienił się login to wysyłamy maila z nowym hasłem! */
                $zmianaHasla = false;
                $losujHaslo = "[obowiązuje stare hasło]";
                if ($_POST['login'] != $user['login']) {
                    $losujHaslo = '';
                    for ($i = 0; $i < 10; $i++)
                        $losujHaslo .= $znaki[array_rand($znaki)];
                    $haslo = md5($losujHaslo . 'login' . $_POST['login']);

                    $pola['login'] = $_POST['login'];
                    $pola['haslo'] = $haslo;
                    $zmianaHasla = true;
                }
                $user->SetAll($pola)->Save();

                /* Wysyłanie maila do użytkownika z wygenerowanym hasłem */
                $wiadomosc = $this->wiadomosc($_POST['status'], $user['login'], $losujHaslo, $user['kod_aktywacyjny']);

                if (new Mail($user['mail'], 'nowycms.local twoje konto zostało założone', $wiadomosc)) {
                    $this->zakoncz('/cms/uzytkownicy/');
                } else {
                    $bledy[] = 'Nie udało się wysłać maila. Powiadom administratora!';
                    $this->daneTPL['bledy'] = $bledy;
                }
            } else {
                $this->daneTPL['bledy'] = $bledy;
            }
        }
    }

    private function dodaj() {
        $tab = new AutoDB('uzytkownik');
        $user = $tab->Create();

        /* Wyciąganie wszystkich dostępnych grup */
        $grupy = array();
        $tabGrupa = new AutoDB('cms_grupy');
        $grupySQL = $tabGrupa->Select('*')->Run();
        if ($grupySQL != false) {
            $grupySQL = $grupySQL->AsArray();
            foreach ($grupySQL as $v) {
                $grupy[$v['id']] = $v['nazwa'];
            }
        }

        $this->daneTPL['form'] =
                Form_Uzytkownik::generuj($user, '/cms/uzytkownicy/edycja/akcja,dodaj.html', $grupy);

        if (isset($_POST['login'])) {
            $bledy = $this->waliduj();
            if (Form_Valid::isValid($bledy)) {
                $znaki = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'q', 'w', 'e',
                    'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l',
                    'z', 'x', 'c', 'v', 'b', 'n', 'm');

                for ($i = 0; $i < 10; $i++)
                    $losujHaslo .= $znaki[array_rand($znaki)];
                $haslo = md5($losujHaslo . 'login' . $_POST['login']);

                for ($i = 0; $i < 10; $i++)
                    $kodaktywacyjny .= $znaki[array_rand($znaki)];

                $pola = array(
                    'id_grupa' => $_POST['id_grupa'],
                    'login' => $_POST['login'],
                    'mail' => $_POST['mail'],
                    'haslo' => $haslo,
                    'kod_aktywacyjny' => $kodaktywacyjny,
                    'ostatnie_logowanie' => '2000-01-01',
                    'status' => $_POST['status']
                );
                $user->SetAll($pola)->Save();

                /* Wysyłanie maila do użytkownika z wygenerowanym hasłem */
                $wiadomosc = $this->wiadomosc($_POST['status'], $user['login'], $losujHaslo, $kodaktywacyjny);

                if (new Mail($user['mail'], 'nowycms.local twoje konto zostało założone', $wiadomosc)) {
                    $this->zakoncz('/cms/uzytkownicy/');
                } else {
                    $bledy[] = 'Nie udało się wysłać maila. Powiadom administratora!';
                    $this->daneTPL['bledy'] = $bledy;
                }
            } else {
                $this->daneTPL['bledy'] = $bledy;
            }
        }
    }

    private function waliduj() {

        $tab = new AutoDB('uzytkownik');
        $wynik = $tab->Select('id, login')->
                Where(array('login' => Form_Valid::getFormValue('login')))->
                GetFirst();

        if (Form_Valid::isEmpty(Form_Valid::getFormValue('login'))) {
            $bledy[] = "Login jest pusty";
        } else if (!Form_Valid::checkLength(Form_Valid::getFormValue('login'), 40, 3)) {
            $bledy[] = "Login jest dłuższy niż 40 znaków lub skłąda się z mniej niż 3 znaków!";
        } else if (!Form_Valid::isAlpha(Form_Valid::getFormValue('login'), '0-9_\-')) {
            $bledy[] = "Login może zawierać tylko cyfry, litery, myślnik i podkreślnik";
        } else if ($wynik !== false &&
                ($wynik['id'] != Form_Valid::getFormValue("id"))) {
            $bledy[] = "Login nie jest unikatowy!";
        }

        if (Form_Valid::isEmpty(Form_Valid::getFormValue('mail'))) {
            $bledy[] = "Twoj email jest pusty";
        } else if (!Form_Valid::isEmail(Form_Valid::getFormValue('mail'))) {
            $bledy[] = "Adres email jest nieprawidłowy";
        }


        return $bledy;
    }

    private function aktywuj() {
        if (!isset($this->param['id']) || !is_numeric($this->param['id'])) {
            die();
        }
        $tab = new AutoDB('uzytkownik', 'id');
        $user = $tab->Get($this->param['id']);
        $user->Set('status', 1);
        $user->Save();
        die();
    }

    private function usun() {
        if (!isset($this->param['id']) || !is_numeric($this->param['id'])) {
            die();
        }
        $tab = new AutoDB('uzytkownik', 'id');
        $user = $tab->Get($this->param['id']);
        $user->Set('status', 0);
        $user->Save();
        die();
    }

    /**
     * Metoda zwraca treść wiadomości do wysłania w zależności od przekazanego statusu
     * @param type $status 
     */
    private function wiadomosc($status, $login, $haslo, $kodaktywacyjny) {
        switch ($status) {
            case 0:
                $wiadomosc = "Witaj $login,<br />" .
                        'Zarejestrowałeś/aś się na stronie nowycms.local. ' .
                        'Jeżeli to nie Ty się zarejestrowałeś/aś zignoruj tego maila.<br /><br />' .
                        'Zarządzano wygenerowania hasła. Twoje hasło to: ' . $haslo . '.<br /><br />' .
                        'Twoje konto ma status "Usunięty". Oznacza to, że nie możesz się zalogować na konto. Skontaktuj się z administratorem!' .
                        '</b></a><br /><br />Pozdrawiam Grupa nowycms.local';
                break;
            case 1:
                $wiadomosc = "Witaj $login,<br />" .
                        'Zarejestrowałeś/aś się na stronie nowycms.local. ' .
                        'Jeżeli to nie Ty się zarejestrowałeś/aś zignoruj tego maila.<br /><br />' .
                        'Zarządzano wygenerowania hasła. Twoje hasło to: ' . $haslo . '.<br /><br />' .
                        'Pozdrawiam Grupa nowycms.local';
                break;
            case 2:
                $wiadomosc = "Witaj $login,<br />" .
                        'Zarejestrowałeś/aś się na stronie nowycms.local. ' .
                        'Jeżeli to nie Ty się zarejestrowałeś/aś zignoruj tego maila.<br /><br />' .
                        'Zarządzano wygenerowania hasła. Twoje hasło to: ' . $haslo . '.<br /><br />' .
                        '<b>Kliknij w poniższy link, aby aktywować konto:</b><br />' .
                        "<a href=\"http://nowycms.local/rejestracja/akcja,potwierdz,login,$login,hash,$kodaktywacyjny.html\">" .
                        "<b>http://nowycms.local/rejestracja/akcja,potwierdz,login,$login,hash,$kodaktywacyjny.html" .
                        '</b></a><br /><br />Pozdrawiam Grupa nowycms.local';
                break;
            case 3:
                $wiadomosc = "Witaj $login,<br />" .
                        'Zarejestrowałeś/aś się na stronie nowycms.local. ' .
                        'Jeżeli to nie Ty się zarejestrowałeś/aś zignoruj tego maila.<br /><br />' .
                        'Zarządzano wygenerowania hasła. Twoje hasło to: ' . $haslo . '.<br /><br />' .
                        'Twoje konto ma status "Zbanowany". Oznacza to, że nie możesz się zalogować na konto. Skontaktuj się z administratorem!' .
                        '</b></a><br /><br />Pozdrawiam Grupa nowycms.local';
                break;
            default:
                $wiadomosc = "Wystąpił błąd. Powiadom administratora!";
                break;
        }
        return $wiadomosc;
    }

}

?>
